package controle;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;
import java.util.Map;

import javax.swing.JFrame;

import modelo.Eleitor;
import modelo.Prefeito;
import modelo.Vereador;
import vista.JanelaMsg;
import vista.VistaAdmin;
import vista.VistaLogin;

public class AtualizaCliente extends Thread {

	boolean modoVotacao;
	Map<String, Eleitor> eleitores;
	Map<String, Vereador> vereadores;
	Map<String, Prefeito> prefeitos;
	VistaAdmin vistaAdmin;
	VistaLogin vistaLogin;
	JFrame janela;

	public AtualizaCliente(boolean modoVotacao, Map<String, Eleitor> es,
			Map<String, Vereador> vs, Map<String, Prefeito> ps,
			VistaAdmin vistaAdmin, VistaLogin vistaLogin, JFrame janela){
		this.janela = janela;
		this.vistaLogin = vistaLogin;
		this.vistaAdmin = vistaAdmin;
		this.modoVotacao = modoVotacao;
		eleitores = es;
		vereadores = vs;
		prefeitos = ps;
	}

	@SuppressWarnings("unchecked")
	@Override
	public void run() {
		DataInputStream leitor;
		ObjectInputStream tradutor;
		Socket porta;
		Map<String, Eleitor> eleitores;
		Map<String, Vereador> vereadores;
		Map<String, Prefeito> prefeitos;

		try {
			porta = new Socket("127.0.0.1", 7004);
			leitor = new DataInputStream(porta.getInputStream());
			tradutor = new ObjectInputStream(leitor);
			modoVotacao = leitor.readBoolean();
			if (modoVotacao == true) {
				eleitores = (Map<String, Eleitor>) tradutor.readObject();
				this.eleitores.putAll(eleitores);
				vereadores = (Map<String, Vereador>) tradutor.readObject();
				this.vereadores.putAll(vereadores);
				prefeitos = (Map<String, Prefeito>) tradutor.readObject();
				this.prefeitos.putAll(prefeitos);
				new JanelaMsg("PopUp",
						"candidatos e eleitores recebidos com sucesso");
				vistaAdmin.fecharJanelas();
				janela.remove(vistaAdmin);
				janela.add(vistaLogin);
				vistaLogin.updateUI();
				janela.setVisible(true);
				porta.close();
				porta = null;
			}
		} catch (IOException e) {
			new JanelaMsg("Error!", "Servidor Inativo!");
		} catch (ClassNotFoundException e) {
			new JanelaMsg("Error!",
					"Erro na recepao dos eleitores e candidatos");
		}
	}

	public void setModoVotacao(boolean modoVotacao) {
		this.modoVotacao = modoVotacao;
	}

	public boolean isModoVotacao() {
		return modoVotacao;
	}

	public Map<String, Eleitor> getEleitores() {
		return eleitores;
	}

	public Map<String, Vereador> getVereadores() {
		return vereadores;
	}

	public Map<String, Prefeito> getPrefeitos() {
		return prefeitos;
	}
}
